home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / A-COMAL Series / (k)aaj.d64 / src.irq < prev    next >
Text File  |  2007-02-28  |  8KB  |  409 lines

  1. ;
  2. ;--------------------------------;
  3. ;                                ;
  4. ;  SRC.IRQ (COMAL PACKAGE)       ;
  5. ;                                ;
  6. ;  EXTENDING COMAL WITH PROC'S & ;
  7. ;  FUNC'S TO MAKE INTERRUPT FROM ;
  8. ;  COMAL POSSIBLE IN AN EASY WAY ;
  9. ;                                ;
  10. ;  PROCEDURES:                   ;
  11. ;      SETALARM(TIME$)           ;
  12. ;      SETCOUNT(INT)             ;
  13. ;      COUNT(FLAG)               ;
  14. ;  FUNCTIONS:                    ;
  15. ;      SSCOL                     ;
  16. ;      SDCOL                     ;
  17. ;      EVENT                     ;
  18. ;                                ;
  19. ;  BY M.BOKHORST, 850921         ;
  20. ;  REVISED BY D.KLINGENS         ;
  21. ;  DUTCH COMAL USERS GROUP       ;
  22. ;                                ;
  23. ;  LAST CHANGE:   860604         ;
  24. ;                                ;
  25. ;     +-------------------+      ;
  26. ;     !  DON'T USE RS232  !      ;
  27. ;     +-------------------+      ;
  28. ;                                ;
  29. ;--------------------------------;
  30. ;
  31. FALSE  = 0
  32. TRUE   = 1
  33. DEFPAG = %01000110
  34. FUNC   = 227
  35. ENDFNC = 126
  36. ENDPRC = 126
  37. PROC   = 112
  38. VALUE  = 114
  39. INT    = 1
  40. STR    = 2
  41. PSHINT = $C9CE
  42. FNDPAR = $C896
  43. COPY1  = $45
  44. CINV   = $0314
  45. EXCINF = $4D
  46. ESCMET = $08
  47. D1ICR  = $DC0D
  48. ALARM  = 4
  49. SPRSPR = $D01E
  50. SPRBCK = $D01F
  51. SRQ    = $04
  52. DSCRD  = 3
  53. DUMMY  = $CA2F
  54. ARG    = 1
  55. RUNERR = $C9FB
  56. SRQON  = $20
  57. OVRLAY = $DE00
  58. PAGE   = 6
  59. IRQMSK = $D01A
  60. D1CRB  = $DC0F
  61. CALL   = $C881
  62. ERROR  = 9
  63. IRQRAM = $C100+$80
  64. R6510  = 1
  65. SPINT  = $03FE
  66. ICR    = $03FF
  67. IRQOCC = $D019
  68. ;
  69. ; SPINT IDENTIFIES A SPECIAL
  70. ; INTERRUPT, NOT FOR COMAL
  71. ; THIS VARIABLE EXISTS TO SAVE
  72. ; TIME FOR ALREADY HANDLED IRQ'S
  73. ;
  74. ; BOTH RS232 BUFFERS ARE USED BY
  75. ; CHANGE AND FIND!
  76. ;
  77. ;----- START OF PACKAGE ---------;
  78. ;
  79. *      = $9000
  80. ;
  81. ;--------------------------------;
  82. ;
  83. .BYTE DEFPAG
  84. .WORD END
  85. .WORD  SIGNAL
  86. ;
  87. .BYTE 3,'IRQ'
  88. .WORD PRTAB
  89. .WORD INIT
  90. .BYTE 0
  91. ;
  92. ;--------------------------------;
  93. ;
  94. PRTAB
  95. ;
  96. .BYTE 5,'EVENT'
  97. .WORD HEVENT
  98. .BYTE  5,'SSCOL'
  99. .WORD HSPRIT
  100. .BYTE  5,'SDCOL'
  101. .WORD HDATA
  102. .BYTE  5,'COUNT'
  103. .WORD HCNT
  104. .BYTE  8,'SETCOUNT'
  105. .WORD HSET
  106. .BYTE 8,'SETALARM'
  107. .WORD HALARM
  108. .BYTE 0
  109. ;
  110. ;--------------------------------;
  111. ;
  112. HEVENT
  113. ;
  114. .BYTE  FUNC            ;FUNC EVENT
  115. .WORD EVENT
  116. .BYTE 0
  117. .BYTE ENDFNC
  118. ;
  119. HSPRIT
  120. ;
  121. .BYTE  FUNC            ;FUNC SSCOL
  122. .WORD SPR
  123. .BYTE 0
  124. .BYTE ENDFNC
  125. ;
  126. HDATA
  127. ;
  128. .BYTE  FUNC            ;FUNC SDCOL
  129. .WORD DAT
  130. .BYTE 0
  131. .BYTE ENDFNC
  132. ;
  133. HCNT
  134. ;
  135. .BYTE  PROC            ;PROC COUNT
  136. .WORD  SETCNT
  137. .BYTE 1
  138. .BYTE VALUE+INT
  139. .BYTE ENDPRC
  140. ;
  141. HSET
  142. ;
  143. .BYTE  PROC            ;PROC
  144. .WORD  SET             ;  SETCOUNT
  145. .BYTE 1
  146. .BYTE VALUE+INT
  147. .BYTE ENDPRC
  148. ;
  149. HALARM
  150. ;
  151. .BYTE  PROC            ;PROC ALARM
  152. .WORD ALRM
  153. .BYTE 1
  154. .BYTE VALUE+STR
  155. .BYTE ENDPRC
  156. ;
  157. ;--------------------------------;
  158. ; CODE FOR PROC SETCOUNT(INT)    ;
  159. ;      INT: 0-255                ;
  160. ;--------------------------------;
  161. ;
  162. SET    LDA #1
  163.        JSR FNDPAR
  164.        LDY #0
  165.        LDA (COPY1),Y
  166.        BEQ VALOK
  167. ARGERR LDX #ARG
  168.        JMP RUNERR
  169. VALOK  INY
  170.        LDA (COPY1),Y
  171.        BEQ ARGERR
  172.        SEI
  173.        STA CNTVAL
  174.        STA CNTING
  175.        CLI
  176.        RTS
  177. ;
  178. ;--------------------------------;
  179. ; CODE FOR SOME FUNCS            ;
  180. ; REGISTERS ARE RESET AFTER READ ;
  181. ;--------------------------------;
  182. ;
  183. EVENT  LDX OCUR
  184.        SEI
  185.        LDA #FALSE
  186.        STA OCUR
  187.        BEQ RETURN
  188. SPR    LDX SPRITE
  189.        SEI
  190.        LDA #FALSE
  191.        STA SPRITE
  192.        BEQ RETURN
  193. DAT    LDX DATA
  194.        SEI
  195.        LDA #FALSE
  196.        STA DATA
  197. RETURN CLI
  198.        JMP PSHINT
  199. ;
  200. ;--------------------------------;
  201. ; CODE FOR  PROC COUNT(INT)      ;
  202. ;      INT=0: STOP COMAL COUNTER ;
  203. ;      INT=1: START COMAL COUNTER;
  204. ;--------------------------------;
  205. ;
  206. SETCNT LDA #1
  207.        JSR FNDPAR
  208.        LDY #0
  209.        LDA (COPY1),Y
  210.        INY
  211.        ORA (COPY1),Y
  212.        STA COUNT
  213.        RTS
  214. ;
  215. ;--------------------------------;
  216. ; CODE FOR  PROC SETALARM(STR)   ;
  217. ;      STR: HH:MM:SS.T           ;
  218. ;      THE SAME AS FOR SETTIME   ;
  219. ;--------------------------------;
  220. ;
  221. ALRM   LDA D1CRB
  222.        ORA #128
  223.        STA D1CRB
  224.        JSR CALL
  225.        .BYTE $80
  226.        .WORD $A7FF
  227. ERR    LDA D1CRB
  228.        AND #127
  229.        STA D1CRB
  230.        RTS
  231. ;
  232. ;--------------------------------;
  233. ; INIT ROUTINE PACKAGE           ;
  234. ; SETUP IRQ & VARIABLES          ;
  235. ;--------------------------------;
  236. ;
  237. INIT   LDX #ENDIRQ-IRQ
  238. LOOP   LDA IRQ,X
  239.        STA IRQRAM,X
  240.        DEX
  241.        BPL LOOP
  242.        LDA #<IRQRAM
  243.        LDY #>IRQRAM
  244.        SEI
  245.        STA CINV
  246.        STY CINV+1
  247.        LDA #FALSE
  248.        STA COUNT
  249.        STA DATA
  250.        STA SPRITE
  251.        STA OCUR
  252.        STA SPINT
  253.        CLI
  254.        LDA EXCINF      ;LET COMAL
  255.        ORA #SRQON      ;KNOW THAT
  256.        STA EXCINF      ;SRQ IS ON
  257.        LDA #%10000100
  258.        STA D1ICR       ;ALARM ON
  259.        LDA IRQMSK
  260.        ORA #%00000110
  261.        STA IRQMSK   ;COL'S ON
  262.        RTS
  263. ;
  264. ;--------------------------------;
  265. ; SUBROUTINE TEST: TEST FOR      ;
  266. ;                 SPECIAL EVENTS ;
  267. ;--------------------------------;
  268. ;
  269. TEST   LDA EXCINF
  270.        AND #ESCMET
  271.        BEQ NOESC
  272.        LDA #%00000001
  273.        JSR SETUP
  274. ;
  275. NOESC  LDA D1ICR
  276.        STA ICR        ;FOR COMAL
  277.        AND #ALARM
  278.        BEQ NOALRM
  279.        LDA #TRUE
  280.        STA SPINT
  281.        LDA #%00000010
  282.        JSR SETUP
  283. ;
  284. NOALRM LDA IRQOCC
  285.        AND #4
  286.        BEQ NOSPR
  287.        LDA SPRSPR
  288.        PHA
  289.        ORA SPRITE
  290.        STA SPRITE
  291.        PLA
  292.        STA $C268       ;FOR COMAL
  293.        ORA $C26C       ;FUNC
  294.        STA $C26C       ;SPRITECOL
  295.        LDA #TRUE
  296.        STA SPINT
  297.        LDA #%00000100
  298.        JSR SETUP
  299. ;
  300. NOSPR  LDA IRQOCC
  301.        AND #2
  302.        BEQ NODATA
  303.        LDA SPRBCK
  304.        PHA
  305.        ORA DATA
  306.        STA DATA
  307.        PLA
  308.        STA $C269       ;FOR COMAL
  309.        ORA $C26E       ;FUNC
  310.        STA $C26E       ;DATACOL
  311.        LDA #TRUE
  312.        STA SPINT
  313.        LDA #%00001000
  314.        JSR SETUP
  315. ;
  316. NODATA LDA COUNT
  317.        BEQ NOCNT
  318.        DEC CNTING
  319.        BNE NOCNT
  320.        LDA CNTVAL
  321.        STA CNTING
  322.        LDA #%00010000
  323.        JSR SETUP
  324. ;
  325. NOCNT  LDA #%00000110
  326.        STA IRQOCC      ;RESET VIC
  327.        RTS
  328. ;
  329. ;--------------------------------;
  330. ; SUBROUTINE SETUP: LATCH EVENTS ;
  331. ;--------------------------------;
  332. ;
  333. SETUP  ORA OCUR
  334.        STA OCUR
  335.        LDA EXCINF
  336.        ORA #SRQ
  337.        STA EXCINF
  338.        RTS
  339. ;
  340. ;--------------------------------;
  341. ; PACKAGE SIGNAL ROUTINE         ;
  342. ;--------------------------------;
  343. ;
  344. SIGNAL CPY #DSCRD
  345.        BNE LETON
  346.        LDA #<$C3BF
  347.        LDY #>$C3BF
  348.        SEI
  349.        STA CINV
  350.        STY CINV+1
  351.        CLI
  352. OKDONE RTS
  353. LETON  CPY #ERROR
  354.        BNE OKDONE
  355.        JMP ERR          ;RESET
  356. ;                        SETALARM
  357. ;
  358. ;--------------------------------;
  359. ; NEW IRQ ROUTINE                ;
  360. ; NOTICE THAT THE FIRST PART OF  ;
  361. ; THE COMAL ROUTINE IS SKIPPED   ;
  362. ; THIS ROUTINE IS TRANSFERED TO  ;
  363. ; IRQRAM (RAM!)                  ;
  364. ;--------------------------------;
  365. ;
  366. IRQ    LDA PAGE
  367.        PHA
  368.        LDA R6510
  369.        PHA
  370.        LDA #$36
  371.        STA R6510
  372.        LDA #$E0        ;SELECT RAM
  373.        STA PAGE
  374.        STA OVRLAY
  375.        JSR TEST
  376.        PLA
  377.        STA R6510
  378.        LDA SPINT
  379.        BEQ GOCOML
  380.        LDA #FALSE
  381.        STA SPINT
  382.        PLA
  383.        STA PAGE
  384.        STA OVRLAY
  385.        JMP $EA81
  386. GOCOML LDA #$83        ;COMAL PAGE
  387.        STA PAGE
  388.        STA OVRLAY
  389.        LDA ICR
  390.        JMP $C3CC
  391. ENDIRQ
  392. ;
  393. ;--------------------------------;
  394. ; SOME VARIABLES                 ;
  395. ;--------------------------------;
  396. ;
  397. OCUR   .BYTE 0
  398. SPRITE .BYTE 0
  399. DATA   .BYTE 0
  400. COUNT  .BYTE 0
  401. CNTING .BYTE 0
  402. CNTVAL .BYTE 0
  403. ;
  404. ;--------------------------------;
  405. ; AND FINALLY THE                ;
  406. ;                                ;
  407. END    .END                      ;
  408. ;--------------------------------;
  409.